SRC_DIR = src/

CXX = g++
CXXFLAGS = -std=c++23 -I$(SRC_DIR)parser/include/ -I$(SRC_DIR)parser/ast/include/ -I$(SRC_DIR)other/include/

BUILD_DIR = build/
OBJ_DIR = $(BUILD_DIR)obj/
TARGET = $(BUILD_DIR)idk

SRC = $(wildcard $(SRC_DIR)*.cpp $(SRC_DIR)parser/*.cpp $(SRC_DIR)parser/ast/*.cpp $(SRC_DIR)other/*.cpp)
OBJ = $(patsubst $(SRC_DIR)%.cpp, $(OBJ_DIR)%.o, $(SRC))

$(TARGET) : build_dir $(OBJ)
	$(CXX) $(OBJ) -o $(TARGET)

$(OBJ_DIR)%.o : $(SRC_DIR)%.cpp
	$(CXX) -c $(CXXFLAGS) $< -o $@

build_dir :
	mkdir -p $(BUILD_DIR)
	mkdir -p $(OBJ_DIR)
	mkdir -p $(OBJ_DIR)parser/
	mkdir -p $(OBJ_DIR)parser/ast/
	mkdir -p $(OBJ_DIR)other/

clean :
	rm -rf $(BUILD_DIR)
